/***********************************************************************
*
* Copyright (c) 2012-2025 Barbara Geller
* Copyright (c) 2012-2025 Ansel Sermersheim
*
* Copyright (c) 2015 The Qt Company Ltd.
* Copyright (c) 2012-2016 Digia Plc and/or its subsidiary(-ies).
* Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies).
*
* This file is part of CopperSpice.
*
* CopperSpice is free software. You can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* version 2.1 as published by the Free Software Foundation.
*
* CopperSpice is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
* https://www.gnu.org/licenses/
*
***********************************************************************/

#ifndef QXMLSERIALIZER_P_H
#define QXMLSERIALIZER_P_H

#include <qiodevice.h>
#include <qstack.h>
#include <qtextcodec.h>
#include <qxmlnamepool.h>
#include <qxmlquery.h>
#include <qxmlserializer.h>

#include <qnamepool_p.h>
#include <qabstractxmlreceiver_p.h>

class QXmlSerializerPrivate : public QAbstractXmlReceiverPrivate
{
 public:
   QXmlSerializerPrivate(const QXmlQuery &q,
                         QIODevice *outputDevice);

   QStack<QPair<QXmlName, bool> >      hasClosedElement;
   bool                                isPreviousAtomic;
   QXmlSerializer::State               state;
   const QPatternist::NamePool::Ptr    np;

   QStack<QVector<QXmlName> >          namespaces;

   QIODevice                          *device;
   const QTextCodec                   *codec;
   QTextCodec::ConverterState          converterState;

   QHash<QXmlName::Code, QByteArray>   nameCache;
   const QXmlQuery                     query;

   inline void write(const char c);

 private:
   enum Constants {
      EstimatedTreeDepth = 10,
      EstimatedNameCount = 60
   };
};

void QXmlSerializerPrivate::write(const char c)
{
   device->putChar(c);
}

#endif
